#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int a,b,c,d,e,f,g,h;
int x[100000];

int main()
{
    printf("我是一个父进程,我的pid: %d\n", getpid());

    // 创建子进程！, bash它也是用C语言写的，命令行启动的进程，都是bash的子进程, 大概估摸着，bash源代码中创建子进程用的就是这个
    // fork()->return X -> id : 返回的本质是不是写入？是写入
    // id是不是父进程定义的变量？肯定是啊，保存的是不是数据？是的
    // 返回的时候，发生了写时拷贝，所以同一个变量会有不同的值！
    pid_t id = fork();
    // fork之后，用if进行分流
    if(id < 0) return 1;
    else if(id == 0)
    {
        // child
        while(1)
        {
            printf("我是子进程: pid: %d, ppid:%d, ret: %d, 我正在执行下载任务, &id: %p\n", getpid(), getppid(), id, &id);
            sleep(1);
        }
    }
    else
    {
        // parent
        while(1)
        {
            printf("我是父进程: pid: %d, ppid:%d, ret: %d, 我正在执行播放任务, &id: %p\n", getpid(), getppid(), id, &id);
            sleep(1);
        }
    }





   // while(1)
   // {
   //     printf("我是一个进程，我的pid是: %d, ppid: %d, fork return id: %d\n", getpid(), getppid(), id); // 这个函数只调用了一次
   //     sleep(1); // for test
   // }

    //chdir("/home/whb");
    //// cwd/109.txt
    //FILE *fp = fopen("./109.txt", "w");
    //if(fp == NULL)return 1;
    //fclose(fp);
    //while(1)
    //{
    //    printf("I am a process: myid: %d, parent id:%d\n", getpid(), getppid());
    //    sleep(1);
    //}
    return 0;
}
